<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

/**
 * ABM de Interesados
 *  
 */
class ABM_Alumnos extends CI_Controller {
    function __construct() {
        parent::__construct();
        
         //Si el usuario no está logueado redirijo al modulo de login.
        if(!$this->autenticacion->logueado()){
            redirect('admin/usuarios');
        }
        
        //ZONA DE CARGA DE HELPERS Y MODELOS
        $this->load->helper('html');
        $this->load->model('Personas_Model');
        $this->load->model('Comisiones_Model');
        $this->load->model('Cursos_Model');
        $this->load->model('Niveles_Model');
        $this->load->library('grocery_CRUD');	
         
        //ZONA DE INICIALIZACIÓN DE VARIABLES
        $this->encabezado['usuario']=  $this->session->userdata('usuario');
        $this->menu['menu']='personas';
        $this->menu['submenu']='alumnos';
    }
    
    /*La función index muestra listado de personas y opciones para editar e
     * ingresar una nueva.
     */
    function index(){
        $this->abm();
    }
    
    /**
     * Puede recibir como parámetro el id de un persona para mostrar específicamente
     * Los cursos en los que está anotado esa persona.
     * 
     * @param integer $idPersona
     */
    function abm($idPersona=NULL){
        //Creo el objeto crud
        $crud = new grocery_CRUD();

        //Defino Template como datatables.
        //$crud->set_theme('datatables');

        //Defino tabla sobre la que trabajo y tipo de 'Objeto'
        $crud->set_table('Alumnos');
        
        //Si el idPersona no viene seteado estoy creando y listando alumnos.
        //Si viene estoy creando y listado inscripciones de esa persona.
        if(isset($idPersona)){
            $crud->set_subject('Incripción');
        }
        else{
            $crud->set_subject('Alumno');   
        }
        
        //Si tengo el idPersona restrinjo a esa persona.
        if(isset($idPersona)){
            $crud->where('idPersona', $idPersona);
        }
        else{
            //Defino Relaciones 1-n
            //Lo hago sólo si no está ya asignada la persona porque sino falla el CRUD
            $crud->set_relation('idPersona', 'Personas', '{nombre} {apellido}');
        }
        
        $crud->add_action('Ver Cuotas', base_url().'assets/grocery_crud/themes/flexigrid/css/images/money.png', 'admin/abm_alumnos/abm_cuotas','');

        
        //Quito el botones borrar.
        $crud->unset_delete();
        
        //Defino los campos para agregar. En la inserción la fecha de alta la
        //pone automáticamente la BBDD. Y la de baja de no es requerida.
        $crud->add_fields('idPersona', 'idComision');
        
        //En la edición sólo agrego la baja.
        $crud->edit_fields('idPersona', 'idComision', 'fechaBaja');
        
        //Seteo campos requeridos
        $crud->required_fields('idPersona', 'idComision');
        
        //Defino como se va a mostrar la columna de Comisión y el campo a través
        //de funciones callback.
        $crud->callback_field('idComision', array($this, '_callback_campo_comision'));
        $crud->callback_column('idComision', array($this, '_callback_columna_comision'));
        
        //Si tengo una persona definida entonces oculto el campo persona y no
        //lo muestro en la tabla de columnas.
        if(isset($idPersona)){
            $crud->change_field_type('idPersona', 'hidden', $idPersona);
            $crud->columns('idComision', 'fechaAlta', 'fechaBaja');
        }
        
        //Defino nombres para cada campo.
        $crud->display_as('idPersona', 'Persona');
        $crud->display_as('idComision', 'Comision');
        $crud->display_as('fechaAlta', 'Fecha de Alta');
        $crud->display_as('fechaBaja', 'Fecha de Baja');
        
        $crud->callback_after_insert(array($this, '_callback_crear_cuotas'));
        $crud->callback_after_update(array($this, '_callback_edicion'));
        
        //Genero el ABM
        $output=$crud->render();
        
        //Llamo a la función encargada de mostrar el ABM.
        //Si la persona viene definida muestro una versión mínima para el
        //shadowbox.
        if(isset($idPersona)){
            $persona=$this->Personas_Model->getPersona($idPersona);
            $output->titulo_crud="Inscripciones de ".$persona['nombre']." ".$persona['apellido'];
            $this->mini_crud($output);
        }
        else{
            $this->mostrar_crud($output);
        }
    }
    
    private function mostrar_crud($output = null, $vista='abm_view', $data = NULL) {   
        
        $this->encabezado['abm']=TRUE;
        $this->encabezado['js_files']=$output->js_files;
        $this->encabezado['css_files']=$output->css_files;
        
        $this->load->view('admin/template/encabezado', $this->encabezado);
        $this->load->view('admin/template/menu', $this->menu);
        $this->load->view("admin/abm_alumnos/$vista", $data);
        $this->load->view('admin/crud/crud_view',$output);	
        $this->load->view('admin/template/footer');
	}
    
    private function mini_crud($output){
        $this->load->view('admin/crud/mini_crud_view',$output);	
    }
    
    function _callback_columna_comision($idComision){
        
        $comision = $this->Comisiones_Model->getComision($idComision);
        
        $curso = $this->Cursos_Model->getCurso($comision['idCurso']) ;
        
        $nivel = $this->Niveles_Model->getNivel($comision['idNivel']);
        
        $diasCursado = "<br/>";
        foreach($this->Comisiones_Model->get_dias_cursado($idComision) as $dia){
            $diasCursado.= $dia['diaSemana']." ".$dia['horaInicio']."  -"; 
        }
        
        $linea = "ID: $idComision - ".$curso['titulo']." - ".$nivel['descripcion'].":$diasCursado"; 
        
        //$linea="hola";
        
        return $linea;
    
    }
    
    function _callback_campo_comision($idComision=""){
        
        $comisiones = $this->Comisiones_Model->get_comisiones_por_empezar();
        
        $comisionesAMostrar=array();
        foreach ($comisiones as $id => $comision){
            $curso = $this->Cursos_Model->getCurso($comision['idCurso']) ;
        
            $nivel = $this->Niveles_Model->getNivel($comision['idNivel']);
        
            $diasCursado = " ";
            foreach($this->Comisiones_Model->get_dias_cursado($comision['idComision']) as $dia){
                $diasCursado.= $dia['diaSemana']." ".$dia['horaInicio']."  - "; 
            }
            
            $comisionesAMostrar[$comision['idComision']] = $curso['titulo']." - ".$nivel['descripcion'].":$diasCursado"; 
        }
        
        $input = "<select name='idComision' class='chosen-select'>";
        foreach($comisionesAMostrar as $clave => $comision){
            $seleccion = ($idComision == $clave)?"selected='selected'":"";
            $input.="<option value='$clave' $seleccion >$comision</option>";
        }
        $input .= "</select>";
        return $input;
    }
    
    function _callback_crear_cuotas($post_array){
        
        $idPersona=$post_array['idPersona'];
        $idComision=$post_array['idComision'];
        
        $comision=$this->Comisiones_Model->getComision($idComision);
        
        $fecha=  explode('-', $comision['fechaInicio']);
        $cuotas = 13 - $fecha[1] ;
        
        for($x=1; $x<=$cuotas; $x++){
            $this->Personas_Model->insertar_cuota($idPersona, $idComision, $x);
        }
        
        //Inserto el registro
        $registro="Insertó el alumno ID:$idPersona en la Comisión:$idComision";
        $this->registro_actividad->cargar_registro($this->session->userdata('id'), $registro);
    }
    
    function _callback_edicion($post_array){
        $idPersona=$post_array['idPersona'];
        $idComision=$post_array['idComision'];
        //Inserto el registro
        $registro="Editó el alumno ID:$idPersona en la Comisión:$idComision";
        $this->registro_actividad->cargar_registro($this->session->userdata('id'), $registro);
    }
    
    function abm_cuotas($idAlumno){
        $alumno =$this->Personas_Model->get_Alumno($idAlumno);
        $idPersona = $alumno['idPersona'];
        $idComision = $alumno['idComision'];
        
        //Creo el objeto crud
        $crud = new grocery_CRUD();

        //Defino Template como datatables.
        //$crud->set_theme('datatables');

        //Defino tabla sobre la que trabajo y tipo de 'Objeto'
        $crud->set_table('Cuotas');
        $crud->set_subject('Cuota');
        $crud->where(array('idAlumno' => $idPersona, 'idComision' => $idComision));
        
        //Quito el botones borrar.
        $crud->unset_delete();
        $crud->unset_add();
        
        //Seteo campos requeridos
        $crud->required_fields('idComision', 'idAlumno', 'nroCuota', 'pago');
        
        $crud->field_type('idComision', 'hidden', $idComision);
        $crud->field_type('idAlumno', 'hidden', $idPersona);
        $crud->field_type('nroCuota', 'readonly');
        
        //Defino Columnas a Mostrar
        $crud->columns('nroCuota', 'pago');
        
        //Defino nombres para cada campo.
        $crud->display_as('idComision', 'Comision');
        $crud->display_as('idAlumno', 'Persona');
        $crud->display_as('nroCuota', 'Cuota Nº');
        $crud->display_as('pago', 'Pago');
        
        //Genero el ABM
        $output=$crud->render();
        
        $comision = $this->_callback_columna_comision($idComision);
        $persona = $this->Personas_Model->getPersona($idPersona);
        
        //Llamo a la función encargada de mostrar el ABM.
        $output->titulo_crud="Cuotas de ".$persona['nombre']." ".$persona['apellido']." en Comision: $comision";
        $this->mini_crud($output);
    }
}
/* End of file abm_interesados.php */
/* Location: ./application/controllers/abm_interesados.php */